We have moved our forum to GitHub Discussions. For questions about Phalcon v3/v4/v5 you can visit here and for Phalcon v6 here.

Please help with dispatcher->forward debugging

I'm having hard times with forwading the logic between controllers. I have a ControllerBase.php with the following logic:

use Phalcon\Mvc\Controller;

class ControllerBase extends Controller {
    protected function forward ($uri) {
        $uriParts = explode("/", $uri);
        $params = array_slice($uriParts, 2);

        return $this->dispatcher->forward(
            array(
                "controller" => $uriParts[0],
                "action" => $uriParts[1],
                "params" => $params
            )
        );
    }
}

and the UrlController.php that extends the ControllerBase with the following logic:

class UrlController extends ControllerBase {
    public function processRequestAction () {
        $this->view->disable();

        $request = new \Phalcon\Http\Request();

        if (!$request->isPost()) {
            $this->forward("errors/notfound");
        }
    }
}

The code is pretty straightforward. Whenever the request is not a POST request the code should redirect the logic to the ErrorsControllers with this logic:

class ErrorsController extends ControllerBase {
    public function notfound () {
        $response = new \Phalcon\Http\Response();

        $data = array(
            "success" => "false",
            "message" => "404 Not Found"
        );

        $response->setHeader("Content-Type", "application/json");
        $response->setStatusCode(404, "Not Found");
        $response->setContent(json_encode($data));

        return $response;
    }
}

Whenever I call $this->forward the method from ControllerBase is executed just fine but the $this->dispatcher->forward method is not executed at all. I took this example from invo application available on GitHub. Am I missing something here? Do I need to register any custom functions in the boostrap index.php file?



58.4k

Hey man

Try this

    $this->dispatcher->forward(array(
            "controller" => "post",
            "action" => "index"
        ));

Hey, did your problem solve? I met the same question you did.!